package com.op.teachingliteapp.bean;

import org.json.JSONException;
import org.json.JSONObject;

import android.content.ContentValues;

import com.op.teachingliteapp.database.table.BaseColumn;

/**
 * Created by Genji on 2015/6/26. Modified by Kevin
 * 
 * 友情提示：每次加入或者修改字段之后，都要对如下几个类做修改
 * 1、对应的Bean的属性，以及Bean里的fillAttributeByJson，以及Bean里的Setter、Getter方法 2、Table类字段修改
 * 3、Dao类的makeXXXBeanByCursor
 */
public abstract class BaseBean {

	/**
	 * id
	 */
	protected String id;

	/**
	 * 建立时间
	 */
	protected String createTime;

	/**
	 * 更新时间
	 */
	protected String updateTime;

	/**
	 * 数据库相关值
	 */
	protected ContentValues contentValues = new ContentValues();

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.contentValues.put(BaseColumn.COLUMN_ID, id);
		this.id = id;
	}

	public String getCreateTime() {
		return createTime;
	}

	public void setCreateTime(String createTime) {
		this.contentValues.put(BaseColumn.COLUMN_CREATE_TIME, createTime);
		this.createTime = createTime;
	}

	public String getUpdateTime() {
		return updateTime;
	}

	public void setUpdateTime(String updateTime) {
		this.contentValues.put(BaseColumn.COLUMN_UPDATE_TIME, updateTime);
		this.updateTime = updateTime;
	}

	public ContentValues getContentValues() {
		return this.contentValues;
	}

	public void setContentValues(ContentValues contentValues) {
		this.setContentValues(contentValues);
	}

	/**
	 * 填充属性
	 */
	public abstract void fillAttributeByJson(JSONObject jsonObject);

	/**
	 * 从JSONObject里获取值
	 */
	public String getJsonValue(JSONObject jsonObject, String tableName, String key) {
		try {
			if (tableName.equals("null")) {
				return jsonObject.getString(key);
			} else {
				key = captureName(tableName, key);
				return jsonObject.getString(key);
			}

		} catch (JSONException e) {
			return "";
		}
	}

	/**
	 * 将key首字母大写，加上表名
	 * 
	 * @param name
	 * @return
	 */
	public static String captureName(String tableName, String name) {
		char[] cs = name.toCharArray();
		cs[0] -= 32;
		return tableName + String.valueOf(cs);
	}
}
